export default {
	// 深度克隆
	deepClone(obj) {
	    // 对常见的“非”值，直接返回原来值
	    if ([null, undefined, NaN, false].includes(obj)) return obj
	    if (typeof obj !== 'object' && typeof obj !== 'function') {
	        // 原始类型直接返回
	        return obj
	    }
	    const o = uni.$as.test.array(obj) ? [] : {}
	    for (const i in obj) {
	        if (obj.hasOwnProperty(i)) {
	            o[i] = typeof obj[i] === 'object' ? uni.$as.obj.deepClone(obj[i]) : obj[i]
	        }
	    }
	    return o
	},
	
	// JS对象深度合并
	deepMerge(target = {}, source = {}) {
	    target = uni.$as.obj.deepClone(target)
	    if (typeof target !== 'object' || typeof source !== 'object') return false
	    for (const prop in source) {
	        if (!source.hasOwnProperty(prop)) continue
	        if (prop in target) {
	            if (typeof target[prop] !== 'object') {
	                target[prop] = source[prop]
	            } else if (typeof source[prop] !== 'object') {
	                target[prop] = source[prop]
	            } else if (target[prop].concat && source[prop].concat) {
	                target[prop] = target[prop].concat(source[prop])
	            } else {
	                target[prop] = deepMerge(target[prop], source[prop])
	            }
	        } else {
	            target[prop] = source[prop]
	        }
	    }
	    return target
	},
	// 获取某个对象下的属性，用于通过类似'a.b.c'的形式去获取一个对象的的属性的形式
	getProperty(obj, key) {
	    if (!obj) {
	        return
	    }
	    if (typeof key !== 'string' || key === '') {
	        return ''
	    } if (key.indexOf('.') !== -1) {
	        const keys = key.split('.')
	        let firstObj = obj[keys[0]] || {}
	
	        for (let i = 1; i < keys.length; i++) {
	            if (firstObj) {
	                firstObj = firstObj[keys[i]]
	            }
	        }
	        return firstObj
	    }
	    return obj[key]
	},
	// 设置对象的属性值，如果'a.b.c'的形式进行设置
	setProperty(obj, key, value) {
	    if (!obj) {
	        return
	    }
	    // 递归赋值
	    const inFn = function (_obj, keys, v) {
	        // 最后一个属性key
	        if (keys.length === 1) {
	            _obj[keys[0]] = v
	            return
	        }
	        // 0~length-1个key
	        while (keys.length > 1) {
	            const k = keys[0]
	            if (!_obj[k] || (typeof _obj[k] !== 'object')) {
	                _obj[k] = {}
	            }
	            const key = keys.shift()
	            // 自调用判断是否存在属性，不存在则自动创建对象
	            inFn(_obj[k], keys, v)
	        }
	    }
	
	    if (typeof key !== 'string' || key === '') {
	
	    } else if (key.indexOf('.') !== -1) { // 支持多层级赋值操作
	        const keys = key.split('.')
	        inFn(obj, keys, value)
	    } else {
	        obj[key] = value
	    }
	},
	// 判断对象是否为空
	isNull(obj) {
		let result = true
		for(var i in obj)
			result = false
		return result
	},
	isNotNull(obj) {
		let result = false
		for(var i in obj)
			result = true
		return result
	}
}

